查看原文
其他

手把手教你用plotly绘制excel中常见的16种图表(下)

才哥 可以叫我才哥 2021-10-08




大家好,我是才哥。

上一期咱们介绍《手把手教你用plotly绘制excel中常见的16种图表(上)》演示了8种常见图表,今天我们继续演示另外8种常见图表的绘制。

本次内容,同样回复0306即可获取全部演示代码和数据文件。

目录:

  • 1. 树状图

  • 2. 旭日图

  • 3. 直方图

  • 4. 箱形图

  • 5. 瀑布图

  • 6. 漏斗图

  • 7. 股价图

  • 8. 地图

1. 树状图

树状图提供数据的分层视图,并便于识别模式,例如哪些商品是商店的畅销商品。树分支表示为矩形,每个子分支显示为更小的矩形。树状图适合比较层次结构内的比例,但是不适合显示最大类别与各数据点之间的层次结构级别,后面的旭日图可更加直观地显示这些内容。

# 自带数据集 tips
import plotly.express as px

df = px.data.tips()
df.sample(5)
tips

基础的树状图

import plotly.express as px

df = px.data.tips()
df["all"] = "all" # in order to have a single root node
fig = px.treemap(df, 
                 path=['all''sex''day''time'], # 层级顺序 
                 values='total_bill'# 面积大小用total_bill字段决定
                )
fig.show()
树状图

树状热力图

# 自带数据集 gapminder
df = px.data.gapminder()
df.sample(5)
gapminder
# 绘制2007年各大洲各国家人口和人均寿命树状热力图
# 色块面积由人口决定,色块颜色由人均寿命决定
import plotly.express as px
import numpy as np

df= px.data.gapminder().query("year == 2007")
df["world"] = "world" # in order to have a single root node
fig = px.treemap(df, path=['world''continent''country'], values='pop',
                  color='lifeExp', hover_data=['iso_alpha'],
                  color_continuous_scale='RdBu',
                  color_continuous_midpoint=np.average(df['lifeExp'], weights=df['pop']))
fig.show()
树状热力图

2. 旭日图

旭日图非常适合显示分层数据,层次结构的每个级别均通过一个环或圆形表示,最内层的圆表示层次结构的顶级。不含任何分层数据(类别的一个级别)的旭日图与圆环图类似,但具有多个级别的类别的旭日图显示外环与内环的关系。旭日图在显示一个环如何被划分为作用片段时最有效,而另一种类型的分层图表树状图适合比较相对大小。

列表字典数据绘制旭日图

# 列表字典数据绘制旭日图
import plotly.express as px

data = dict(
    character=["Eve""Cain""Seth""Enos""Noam""Abel""Awan""Enoch""Azura"],
    parent=["""Eve""Eve""Seth""Seth""Eve""Eve""Awan""Eve" ],
    value=[1014121026644])

fig =px.sunburst(
    data,
    names='character',
    parents='parent',
    values='value',
)
fig.show()
旭日图

pd.Dataframe类型数据下绘制 旭日图

# pd.Dataframe类型数据下绘制 旭日图
import plotly.express as px

df = px.data.tips()
fig = px.sunburst(df, 
                  path=['day''time''sex'], 
                  values='total_bill'
                 )
fig.show()
旭日图

旭日热力图

# 绘制2007年各大洲各国家人口和人均寿命旭日热力图
# 色块面积由人口决定,色块颜色由人均寿命决定
import plotly.express as px
import numpy as np

df = px.data.gapminder().query("year == 2007")
fig = px.sunburst(df, path=['continent''country'], values='pop',
                  color='lifeExp', hover_data=['iso_alpha'],
                  color_continuous_scale='RdBu',
                  color_continuous_midpoint=np.average(df['lifeExp'], weights=df['pop']))
fig.show()
旭日热力图

3. 直方图

直方图是显示频率数据的柱状图。

# 绘制total_bill直方图
import plotly.express as px

df = px.data.tips()
fig = px.histogram(df, x="total_bill")
fig.show()
直方图

自定义分组nbins

# 分组,参数nbins
import plotly.express as px

df = px.data.tips()
fig = px.histogram(df, x="total_bill"
                   nbins=20# 分成20组
                  )
fig.show()
自定义分组nbins

离散分类直方图

# 如果对离散或分类特征数据进行直方图绘制,和柱状图差不多
import plotly.express as px

df = px.data.tips()
fig = px.histogram(df, 
                   x="day"# day 是星期,是 分类 数据
                  )
fig.show()
离散分类下同柱状图

4. 箱型图

箱型图又称盒须图,用于显示数据到四分位点的分布,突出显示平均值和离群值。箱形可能具有可垂直延长的名为“须线”的线条。这些线条指示超出四分位点上限和下限的变化程度,处于这些线条或须线之外的任何点都被视为离群值。

# 箱型图,以total_bill字段绘制
import plotly.express as px

df = px.data.tips()
fig = px.box(df, y="total_bill")
fig.show()
单一箱线图
# 以time字段拆分,并用颜色区分
import plotly.express as px

df = px.data.tips()
fig = px.box(df, 
             x="time",  # 以 time字段拆分
             y="total_bill"
             color = 'time'# time字段区分颜色
            )
fig.show()
箱线图

5. 瀑布图

瀑布图显示加上或减去值时的累计汇总,在理解一系列正值和负值对初始值(例如,净收入)的影响时,这种图表非常有用

列采用彩色编码,可以快速将正数与负数区分开来。初始值和最终值列通常从水平轴开始,而中间值则为浮动列。由于拥有这样的“外观”,瀑布图也称为桥梁图。

plotly.express中暂时没有瀑布图,我们需要用到plotly.graph_objects

import plotly.graph_objects as go

fig = go.Figure(go.Waterfall(
    name = "20", orientation = "v",
    measure = ["relative""relative""total""relative""relative""total"],
    x = ["Sales""Consulting""Net revenue""Purchases""Other expenses""Profit before tax"],
    textposition = "outside",
    text = ["+60""+80""""-40""-20""Total"],
    y = [60800-40-200],
    connector = {"line":{"color":"rgb(63, 63, 63)"}},
))

fig.update_layout(
        title = "Profit and loss statement 2018",
        showlegend = True
)

fig.show()
瀑布图

6. 漏斗图

漏斗图显示流程中多个阶段的值。

例如,可以使用漏斗图来显示游戏注册付费流程中每个阶段的潜在玩数。通常情况下,值逐渐减小,从而使条形图呈现出漏斗形状。

基础漏斗图

# 基础漏斗图
import plotly.express as px

data = dict(
    number=[3927.420.6112],
    stage=["Website visit""Downloads""Potential customers""Requested price""invoice sent"])
fig = px.funnel(data, 
                x='number'# 值
                y='stage'# 阶段
               )
fig.show()
基础漏斗图

多漏斗图对比

这里我们演示直接从pd.Dataframe类型数据操作绘制的情况

# 构建测试数据 pd.Dataframe类型
import pandas as pd

stages = ["点击""下载""安装""注册""付费"]
df_mtl = pd.DataFrame(dict(number=[3927.420.6113], stage=stages))
df_mtl['office'] = '快手'
df_toronto = pd.DataFrame(dict(number=[523618145], stage=stages))
df_toronto['office'] = '抖音'
df = pd.concat([df_mtl, df_toronto], axis=0)

df.sample(5)
数据预览
import plotly.express as px

fig = px.funnel(df, x='number', y='stage', color='office')
fig.show()
对比漏斗图

7. 股价图

以特定顺序排列在工作表的列或行中的数据可以绘制为股价图。

顾名思义,股价图可以显示股价的波动。不过这种图表也可以显示其他数据(如日降雨量和每年温度)的波动,必须按正确的顺序组织数据才能创建股价图。

plotly.express中暂时没有股价图,我们需要用到plotly.graph_objects

import plotly.graph_objects as go

import pandas as pd
from datetime import datetime

# 获取案例数据
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
df.head()
数据预览
# 绘制简单的 股价图
import plotly.graph_objects as go

fig = go.Figure(data=[go.Candlestick(x=df['Date'],
                open=df['AAPL.Open'],
                high=df['AAPL.High'],
                low=df['AAPL.Low'],
                close=df['AAPL.Close'])])
fig.show()
默认有滑块控件

取消滑块控件

# 去掉滑块控件
import plotly.graph_objects as go

fig = go.Figure(data=[go.Candlestick(x=df['Date'],
                open=df['AAPL.Open'], high=df['AAPL.High'],
                low=df['AAPL.Low'], close=df['AAPL.Close'])
                     ])
fig.update_layout(xaxis_rangeslider_visible=False)
fig.show()
去掉滑块控件

8. 地图

可使用地图图表比较值并跨地理区域显示类别。

数据中含有地理区域(如国家/地区、省/自治区/直辖市、县或邮政编码)时使用地图图表。

plotly的地图绘制形式有很多种,这里不做更详细的介绍,我们后续再找个时间详细讲解。

这里用此前《Python爬取贝壳找房8万+二手房源,看看普通人在北京买房是有多难!》里出现过的上海二手房经纬度数据来进行地图点的绘制,这份数据大家也可以回复0306获取。

import plotly.express as px

df = pd.read_excel(r'F:\PythonCool\可视化\上海二手房经纬度.xlsx')
df.head()
数据预览
# 绘制地图散点图
import plotly.express as px

fig = px.scatter_mapbox(df, lat="纬度", lon="经度",
                        color='均价',
                        color_discrete_sequence=["均价"], 
                        color_continuous_scale='Reds',
                        range_color = [30000150000],
                        zoom=8
                        height=800)
fig.update_layout(mapbox_style="open-street-map"# 开启街道网格
fig.show()
地图

以上就是本期的全部内容,如果大家想更加深入了解plotly可视化操作,建议直接前往官网查看案例做演示,真的很全哦。


--推荐阅读--

手把手教你用plotly绘制excel中常见的16种图表(上)

我又用Python爬取了4000+股票数据,并用plotly绘制了树状热力图(treemap)

【推荐收藏】介绍2种Python绘制词云的手法,你会偷偷pick谁呢?


最后,喜欢的话顺手点个赞、加个在看吧~

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存